home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / DeskBus.p < prev    next >
Text File  |  1996-05-01  |  6KB  |  183 lines

  1. {
  2.      File:        DeskBus.p
  3.  
  4.      Contains:    Apple Desktop Bus (ADB) Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT DeskBus;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __DESKBUS__}
  28. {$SETC __DESKBUS__ := 1}
  29.  
  30. {$I+}
  31. {$SETC DeskBusIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MIXEDMODE__}
  38. {$I MixedMode.p}
  39. {$ENDC}
  40.  
  41. {$PUSH}
  42. {$ALIGN MAC68K}
  43. {$LibExport+}
  44.  
  45. {$IFC FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE }
  46.  
  47. TYPE
  48.     ADBAddress                            = SInt8;
  49.     ADBCompletionProcPtr = Register68kProcPtr;  { PROCEDURE ADBCompletion(buffer: Ptr; refCon: Ptr; command: LONGINT); }
  50.  
  51.     ADBDeviceDriverProcPtr = Register68kProcPtr;  { PROCEDURE ADBDeviceDriver(devAddress: SInt8; devType: SInt8); }
  52.  
  53.     ADBServiceRoutineProcPtr = Register68kProcPtr;  { PROCEDURE ADBServiceRoutine(buffer: Ptr; completionProc: ADBServiceRoutineUPP; refCon: Ptr; command: LONGINT); }
  54.  
  55.     ADBInitProcPtr = Register68kProcPtr;  { PROCEDURE ADBInit(callOrder: SInt8); }
  56.  
  57.     ADBCompletionUPP = UniversalProcPtr;
  58.     ADBDeviceDriverUPP = UniversalProcPtr;
  59.     ADBServiceRoutineUPP = UniversalProcPtr;
  60.     ADBInitUPP = UniversalProcPtr;
  61.     ADBDataBlockPtr = ^ADBDataBlock;
  62.     ADBDataBlock = PACKED RECORD
  63.         devType:                SInt8;                                    {  original handler ID  }
  64.         origADBAddr:            SInt8;                                    {  original ADB Address  }
  65.         dbServiceRtPtr:            ADBServiceRoutineUPP;                    {  service routine pointer  }
  66.         dbDataAreaAddr:            Ptr;                                    {  this field is passed as the refCon parameter to the service routine  }
  67.     END;
  68.  
  69.     ADBDBlkPtr                            = ^ADBDataBlock;
  70.     ADBSetInfoBlockPtr = ^ADBSetInfoBlock;
  71.     ADBSetInfoBlock = RECORD
  72.         siService:                ADBServiceRoutineUPP;                    {  service routine pointer  }
  73.         siDataAreaAddr:            Ptr;                                    {  this field is passed as the refCon parameter to the service routine  }
  74.     END;
  75.  
  76.     ADBSInfoPtr                            = ^ADBSetInfoBlock;
  77. {  ADBOpBlock is only used when calling ADBOp from 68k assembly code  }
  78.     ADBOpBlockPtr = ^ADBOpBlock;
  79.     ADBOpBlock = RECORD
  80.         dataBuffPtr:            Ptr;                                    {  buffer: pointer to variable length data buffer  }
  81.         opServiceRtPtr:            ADBServiceRoutineUPP;                    {  completionProc: completion routine pointer  }
  82.         opDataAreaPtr:            Ptr;                                    {  refCon: this field is passed as the refCon parameter to the completion routine  }
  83.     END;
  84.  
  85.     ADBOpBPtr                            = ^ADBOpBlock;
  86. PROCEDURE ADBReInit;
  87.     {$IFC NOT GENERATINGCFM}
  88.     INLINE $A07B;
  89.     {$ENDC}
  90. {
  91.     ADBOp has a different interface for 68k assembly than for everything else
  92.     for 68k assembly the interface is 
  93.     #pragma parameter __D0 ADBOp(__A0,__D0)
  94.     OSErr ADBOp( ADBOpBlock * pb, short commandNum );
  95. }
  96. {
  97.     IMPORTANT NOTE:
  98.     "Inside Macintosh: Devices" documents the completion routine for ADBOp will be called with
  99.     four parameters using 68k register based calling conventions, specifically the completion routine
  100.     passed in should be of type ADBServiceRoutineProcPtr. However, when upp types were first added
  101.     to this interface file, the type ADBCompletionUPP was mistakenly used for the second parameter
  102.     to ADBOp. Since applications have shipped using completion routines of type ADBCompletionUPP,
  103.     the mistake cannot be corrected.
  104.     The only difference between ADBServiceRoutineUPP and ADBCompletionUPP is the former takes an extra
  105.     argument which is a pointer to itself, fortunately not needed for PowerPC code.
  106.     For compatibility with existing 68k code, when an ADBOp completion routine is called,
  107.     68k register A1 will point to the completion routine, as documented in Inside Mac.
  108. }
  109. FUNCTION ADBOp(refCon: Ptr; compRout: ADBCompletionUPP; buffer: Ptr; commandNum: INTEGER): OSErr;
  110. FUNCTION CountADBs: INTEGER;
  111.     {$IFC NOT GENERATINGCFM}
  112.     INLINE $A077, $3E80;
  113.     {$ENDC}
  114. FUNCTION GetIndADB(VAR info: ADBDataBlock; devTableIndex: INTEGER): ADBAddress;
  115.     {$IFC NOT GENERATINGCFM}
  116.     INLINE $301F, $205F, $A078, $1E80;
  117.     {$ENDC}
  118. FUNCTION GetADBInfo(VAR info: ADBDataBlock; adbAddr: ADBAddress): OSErr;
  119.     {$IFC NOT GENERATINGCFM}
  120.     INLINE $101F, $205F, $A079, $3E80;
  121.     {$ENDC}
  122. FUNCTION SetADBInfo({CONST}VAR info: ADBSetInfoBlock; adbAddr: ADBAddress): OSErr;
  123.     {$IFC NOT GENERATINGCFM}
  124.     INLINE $101F, $205F, $A07A, $3E80;
  125.     {$ENDC}
  126.  
  127. CONST
  128.     uppADBCompletionProcInfo = $007B9802;
  129.     uppADBDeviceDriverProcInfo = $00050802;
  130.     uppADBServiceRoutineProcInfo = $0F749802;
  131.     uppADBInitProcInfo = $00000802;
  132.  
  133. FUNCTION NewADBCompletionProc(userRoutine: ADBCompletionProcPtr): ADBCompletionUPP;
  134.     {$IFC NOT GENERATINGCFM }
  135.     INLINE $2E9F;
  136.     {$ENDC}
  137.  
  138. FUNCTION NewADBDeviceDriverProc(userRoutine: ADBDeviceDriverProcPtr): ADBDeviceDriverUPP;
  139.     {$IFC NOT GENERATINGCFM }
  140.     INLINE $2E9F;
  141.     {$ENDC}
  142.  
  143. FUNCTION NewADBServiceRoutineProc(userRoutine: ADBServiceRoutineProcPtr): ADBServiceRoutineUPP;
  144.     {$IFC NOT GENERATINGCFM }
  145.     INLINE $2E9F;
  146.     {$ENDC}
  147.  
  148. FUNCTION NewADBInitProc(userRoutine: ADBInitProcPtr): ADBInitUPP;
  149.     {$IFC NOT GENERATINGCFM }
  150.     INLINE $2E9F;
  151.     {$ENDC}
  152.  
  153. PROCEDURE CallADBCompletionProc(buffer: Ptr; refCon: Ptr; command: LONGINT; userRoutine: ADBCompletionUPP);
  154.     {$IFC NOT GENERATINGCFM}
  155.     {To be implemented:  Glue to move parameters into registers.}
  156.     {$ENDC}
  157.  
  158. PROCEDURE CallADBDeviceDriverProc(devAddress: SInt8; devType: SInt8; userRoutine: ADBDeviceDriverUPP);
  159.     {$IFC NOT GENERATINGCFM}
  160.     {To be implemented:  Glue to move parameters into registers.}
  161.     {$ENDC}
  162.  
  163. PROCEDURE CallADBServiceRoutineProc(buffer: Ptr; completionProc: ADBServiceRoutineUPP; refCon: Ptr; command: LONGINT; userRoutine: ADBServiceRoutineUPP);
  164.     {$IFC NOT GENERATINGCFM}
  165.     {To be implemented:  Glue to move parameters into registers.}
  166.     {$ENDC}
  167.  
  168. PROCEDURE CallADBInitProc(callOrder: SInt8; userRoutine: ADBInitUPP);
  169.     {$IFC NOT GENERATINGCFM}
  170.     {To be implemented:  Glue to move parameters into registers.}
  171.     {$ENDC}
  172. {$ENDC}
  173. {$ALIGN RESET}
  174. {$POP}
  175.  
  176. {$SETC UsingIncludes := DeskBusIncludes}
  177.  
  178. {$ENDC} {__DESKBUS__}
  179.  
  180. {$IFC NOT UsingIncludes}
  181.  END.
  182. {$ENDC}
  183.